import re

def mulu_split(mulu):
    '''
    目录切分方法
    :return:
    '''
    mulu_str = str(mulu)
    if '\n' in mulu_str:
        mulu_list = mulu_str.split('\n')
    elif '\t' in mulu_str:
        mulu_list = mulu_str.split('\t')
    else:
        mulu_list = special_split(mulu)

    return mulu_list


def special_split(txt):
    '''
    特殊拆分方法
    在‘第一章’’第二章‘’第一节‘这种文本前加个‘\n’，然后用split函数切割’\n‘得到基本的目录形态，之后好进行目录整理
    :param txt:
    :return:
    '''

    # 完全匹配情况情况 ------------------------------------------------------
    # 固定文本加特殊字符或空格
    fullmatch_list = [
        '目录 ',
        '绪论 ',
        '开场白 ',
        '前言 ',
        '总序 ',
        '致谢 ',
        '序言 ',
        '鸣谢 ',
        '作者简介 ',
        '编者的话 ',
        '附录1 ',
        '附录2 ',
        '附录3 ',
        '附录4 ',
        '附录5 ',
        '附录6 ',
        '附录7 ',
        '附录8 ',
        '附录9 ',
    ]
    # ---------------------------------------------------------------

    # 第一种情况 ------------------------------------------------------
    pattern_str = r'(第)' \
                  r'(' \
                  r'\d{1,3}' \
                  r'|[一|二|三|四|五|六|七|八|九|十|百|零|〇]{1,6}' \
                  r'|[Ⅰ|Ⅱ|Ⅲ|Ⅳ|Ⅴ|Ⅵ|Ⅶ|Ⅷ|Ⅸ|Ⅹ|Ⅺ|Ⅻ]{1,6}' \
                  r'|[壹|贰|叁|肆|伍|陆|柒|捌|玖|拾|佰|仟]{1,6}' \
                  r')' \
                  r'(章|节|篇)'
    pattern = re.compile(pattern_str)  # 查找数字

    result = pattern.finditer(txt)

    # result_list = [[item.span(), item.group()] for item in result]
    result_list = [item.group() for item in result]
    match_set = set(result_list)
    print(match_set)

    for item in match_set:
        txt = txt.replace(item, '\n' + item)
    # ---------------------------------------------------------------

    # 第二种情况 ------------------------------------------------------
    pattern_str = r'(一|二|三|四|五|六|七|八|九|十|百|零|〇){1,6}(、|\.){1}'
    pattern = re.compile(pattern_str)  # 查找数字

    result = pattern.finditer(txt)

    # result_list = [[item.span(), item.group()] for item in result]
    # print(result_list)
    result_list = [item.group() for item in result]
    match_set = set(result_list)
    print(match_set)

    for item in match_set:
        txt = txt.replace(item, '\n' + item)
    # ---------------------------------------------------------------

    # 第三种情况 ------------------------------------------------------
    pattern_str = r'§\d{1,3}'
    pattern = re.compile(pattern_str)  # 查找数字

    result = pattern.finditer(txt)

    # result_list = [[item.span(), item.group()] for item in result]
    # print(result_list)
    result_list = [item.group() for item in result]
    match_set = set(result_list)
    print(match_set)

    for item in match_set:
        txt = txt.replace(item, '\n' + item)
    # ---------------------------------------------------------------


    return txt.split('\n')

if __name__ == '__main__':
    mulu = '第一章建筑工程资料管理概述第一节建筑工程资料的基本知识第二节建筑工程资料管理的意义与职责第三节工程文件的归档要求第四节工程文件的组卷' \
          '第五节建筑工程档案的验收与移交第二章工程准备阶段资料&nbsp;第一节工程准备阶段资料管理第二节决策立项阶段文件第三节建设用地、征地、拆' \
          '迁文件第四节勘察、测绘、设计文件第五节招投标文件第六节开工审批文件第七节工程质量监督手续第八节财务文件第九节工程竣工验收文件第三章监' \
          '理资料第一节监理单位文件资料管理流程第二节监理管理资料第三节进度控制资料第四节质量控制资料第五节造价控制资料第六节分包资质资料第七节' \
          '合同管理资料第四章施工资料第一节施工资料管理流程第二节施工管理资料第三节质量控制管理资料第四节工程施工质量验收资料第五节建筑与结构工' \
          '程安全和功能检验资料第五章竣工图、竣工验收及备案资料第六章建筑工程资料管理软件及应用附录参考文献...查看更多'

    # mulu = '第1章 对计算机的基本认识 §1．1 计算机系统概述 §1．2 计算机数据的存储 §1．3 计算机数据的表示 §1．4 计算机数据的操控 §1．5 ' \
    #        '计算机数据的输入和输出 §1．6 Computer 第1章课后练习第2章 计算机软件与操作系统  §2．1 计算机软件概述 §2．2 操作系统概述/> §' \
    #        '2．3 操作系统的组成 §2．4 PC系统的自举过程 §2．5 常用操作系统简介 §2．6 Windowrs 7操作系统的使用 §2．7 Operating System ' \
    #        '第2章课后练习 第3章 计算机网络技术 §3．1 计算机网络基础 §3．2 局域网 §3．3 Internet §3．4 Network：The Ethemet and Th' \
    #        'e Protocol 第3章课后练习第4章 信息安全技术与社会责任 §4．1 信息安全基础概述 §4．2 计算机与网络安全基础 §4．3 网络攻防技术基础' \
    #        ' §4．4 社会责任与职业道德 §4．5 Computer security and Intemet security 第4章课后练习第5章 多媒体技术 §5．1 概述 §5．2' \
    #        ' 数字音频技术  §5．3 数字图像技术  §5．4 数字视频技术 §5．5 计算机动画技术 §5．6 M1Jltimedia：SMIL and VRML 第5章课后练习' \
    #        '第6章 计算机的应用 §6．1 计算机应用领域概述 §6．2 数字化校园 §6．3 电子商务和电子政务 §6．4 云端服务 §6．5 土木工程领域计算机的' \
    #        '应用 §6．6 机械工程领域计算机的应用 §6．7 电气工程领域计算机的应用 §6．8交通运输领域计算机的应用 第6章课后练习 附录1 微型计算机主' \
    #        '要性能指标附录2 ASCIl码附录3 接口标准简介 附录4 常见媒体文件格式简介课后练习答案  参考文献...查看更多'

    mulu_list = mulu_split(mulu)

    print(mulu_list)

    for idx, item in enumerate(mulu_list):
        print(idx, item)